package com.lingnan.wanxiangxinxun.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lingnan.wanxiangxinxun.entity.po.TempFile;
import com.lingnan.wanxiangxinxun.mapper.TempFileMapper;
import com.lingnan.wanxiangxinxun.service.ITempFileService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lingnan.wanxiangxinxun.util.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 临时文件标记表 服务实现类
 * </p>
 *
 * @author swl
 * @since 2025-04-10
 */
@Service
@Slf4j
public class TempFileServiceImpl extends ServiceImpl<TempFileMapper, TempFile> implements ITempFileService {

    @Autowired
    private AliOSSUtils aliOSSUtils;
    @Autowired
    private TempFileMapper tempFileMapper;


    // 根据文件路径删除临时文件记录
    @Override
    public boolean removeByFullPath(List<String> fullPathList) {

        QueryWrapper<TempFile> wrapper = new QueryWrapper<>();
        wrapper.in("file_url", fullPathList);
        int result = tempFileMapper.delete(wrapper);
        if (result < 1) {
            return false; // 删除失败
        }
        return true;
    }


    // 删除所有临时文件（根据表中的记录，删除云存储的，再删表中的这个记录）
    @Override
    public void removeAllTempFile() {

        // 获取表中的所有记录
        List<TempFile> tempFileList = tempFileMapper.selectList(null);
        if (tempFileList != null && !tempFileList.isEmpty()) {
            // 获取表中的所有文件路径
            List<String> fullPathList = tempFileList.stream().map(TempFile::getFileUrl).toList();
            log.info("准备清理的所有文件路径为：{}", fullPathList);
            // 删除云存储中的文件
            try{
                for(String fullPath: fullPathList){
                    aliOSSUtils.deleteObject(fullPath);
                }
            }catch (Exception e){
                log.error("清理临时文件发生异常，异常信息为：{}", e.getMessage());
            }

            // 删除表中的记录
            tempFileMapper.delete(null);
        }

    }
}
